package cc.unitmesh.agent

import kotlinx.cinterop.ExperimentalForeignApi
import kotlinx.datetime.Clock
import platform.Foundation.NSHomeDirectory
import platform.Foundation.NSProcessInfo
import platform.UIKit.UIAccessibilityIsReduceMotionEnabled

@OptIn(ExperimentalForeignApi::class)
actual object Platform {
    actual val name: String = "iOS"
    actual val isJvm: Boolean = false
    actual val isJs: Boolean = false
    actual val isWasm: Boolean = false
    actual val isAndroid: Boolean = false

    actual val isIOS: Boolean = true

    actual fun getOSName(): String {
        return NSProcessInfo.processInfo.operatingSystemVersionString
    }

    actual fun getDefaultShell(): String {
        return "/bin/sh"
    }

    actual fun getCurrentTimestamp(): Long {
        return Clock.System.now().toEpochMilliseconds()
    }

    actual fun getOSInfo(): String {
        val processInfo = NSProcessInfo.processInfo
        return "iOS ${processInfo.operatingSystemVersionString}"
    }

    actual fun getOSVersion(): String {
        return NSProcessInfo.processInfo.operatingSystemVersionString
    }

    actual fun getUserHomeDir(): String {
        return NSHomeDirectory()
    }

    actual fun getLogDir(): String {
        return "${getUserHomeDir()}/.autodev/logs"
    }

    actual fun prefersReducedMotion(): Boolean {
        // iOS: Check reduce motion accessibility setting
        return UIAccessibilityIsReduceMotionEnabled()
    }
}

